package cn.iocoder.lw.module.core.service.project;

import cn.iocoder.lw.framework.common.pojo.PageResult;
import cn.iocoder.lw.module.core.controller.admin.project.vo.*;
import cn.iocoder.lw.module.core.dal.dataobject.device.CoreDeviceDO;
import cn.iocoder.lw.module.core.dal.dataobject.project.CoreProjectDO;

import java.util.List;

/**
 * 核心项目 Service 接口
 *
 * @author Lw源码
 */
public interface CoreProjectService {

    /**
     * 创建项目
     *
     * @param createReqVO 创建信息
     * @param userId 操作用户编号
     * @return 编号
     */
    Long createProject( CoreProjectSaveReqVO createReqVO, Long userId);

    /**
     * 更新项目
     *
     * @param updateReqVO 更新信息
     */
    void updateProject( CoreProjectSaveReqVO updateReqVO);

    /**
     * 删除项目
     *
     * @param id 编号
     */
    void deleteProject(Long id);

    /**
     * 获得项目
     *
     * @param id 编号
     * @return 项目
     */
    CoreProjectRespVO getProject(Long id);

    /**
     * 获得项目分页
     *
     * @param pageReqVO 分页查询
     * @return 项目分页
     */
    PageResult<CoreProjectRespVO> getProjectPage(CoreProjectPageReqVO pageReqVO);

    /**
     * 获得项目列表, 用于 Excel 导出
     *
     * @param pageReqVO 分页查询
     * @return 项目列表
     */
    PageResult<CoreProjectImportExcelVO> getProjectList(CoreProjectPageReqVO pageReqVO);

    /**
     * 校验项目是否存在
     *
     * @param id 编号
     */
    void validateProjectExists(Long id);

    /**
     * 获取负责人名下的项目列表
     *
     * @param ownerUserId 负责人用户编号
     * @return 项目列表
     */
    List<CoreProjectRespVO> getProjectListByOwnerUserId(Long ownerUserId);

    /**
     * 获取项目的原始数据对象（不进行转换）
     *
     * @param projectId 项目编号
     * @return 项目数据对象
     */
    CoreProjectDO getProjectRaw(Long id);

}